/******************************************************************************************
文件名：tcp_server.h
作者：狼狼    版本：V2.0    创建日期：2021.8.2
文件描述：
    头文件。
历史修改记录：
1. 2021-8-2:V2.0 狼狼
创建。
2. 2022-5-11:V2.0 狼狼
代码公开。
******************************************************************************************/
#ifndef TCP_SERVER__
#define TCP_SERVER__
//+------------------------------------------------------------------------------------------+
//|                                           头文件
//+------------------------------------------------------------------------------------------+
/*|*/#include <pthread.h>
//+------------------------------------------------------------------------------------------+
//|                                         参数宏定义
//+------------------------------------------------------------------------------------------+
/*|*/#define TCPSER_SUCCESS               0x00000000
//|    ----------------------------------------
//|    错误码：非法的参数
//|    ----------------------------------------
/*|*/#define TCPSER_ERROR_ILLEGAL_PARAM   0x90011001
//|    ----------------------------------------
//|    错误码：套接字创建错误
//|    ----------------------------------------
/*|*/#define TCPSER_ERROR_SOCKET          0x90011002
//|    ----------------------------------------
//|    错误码：申请内存错误
//|    ----------------------------------------
/*|*/#define TCPSER_ERROR_MALLOC          0x90011003
//|    ----------------------------------------
//|    错误码：当前套接字状态不支持此操作
//|    ----------------------------------------
/*|*/#define TCPSER_ERROR_UNEXPECT_STATE  0x90012001
//+------------------------------------------------------------------------------------------+
//|                                          数据类型
//+------------------------------------------------------------------------------------------+
//|    ----------------------------------------
//|    用于描述套接字状态的枚举类型
//|    NOTE:仅内部使用
//|    ----------------------------------------
/*|*/typedef enum tcp_server_state
/*|*/{
/*|*/    TCPSER_STAT_INIT = 0,
/*|*/    TCPSER_STAT_OK,
/*|*/    TCPSER_STAT_EXIT,
/*|*/}ENUM_TCP_SERVER_STATE;
//|
//|    ----------------------------------------
//|    用于存储一个TCP服务端对象必须信息的结构
//|    ----------------------------------------
/*|*/typedef struct tcp_server
/*|*/{
//|      ----------------------------------------
//|      TCP服务端监听套接字
//|      ----------------------------------------
/*|*/    int sock;
//|      ----------------------------------------
//|      TCP服务端对象名字
//|      NOTE:该字符串用于终端信息打印区分
//|      ----------------------------------------
/*|*/    char name[16];
//|      ----------------------------------------
//|      TCP接受连接的IP地址
//|      ----------------------------------------
/*|*/    char ip_address[16];
//|      ----------------------------------------
//|      TCP服务端监听端口
//|      ----------------------------------------
/*|*/    int port;
//|      ----------------------------------------
//|      套接字对象结构状态信息
//|      ----------------------------------------
/*|*/    ENUM_TCP_SERVER_STATE state;
//|      ----------------------------------------
//|      TCP服务端线程句柄
//|      ----------------------------------------
/*|*/    pthread_t tid;
//|      ----------------------------------------
//|      TCP连接成功的回调函数指针
//|      ----------------------------------------
/*|*/    void (*connect_handle)(int sock_comm);
/*|*/}ST_TCP_SERVER;
//+------------------------------------------------------------------------------------------+

#ifdef __cplusplus
extern "C" {
#endif
//+------------------------------------------------------------------------------------------+
//|                                       函数/变量声明
//+------------------------------------------------------------------------------------------+
/*|*/int tcp_server_create (ST_TCP_SERVER **pptcpser_obj, 
                            const char     ip_address[], 
                            int            port, 
                            const char     name[], 
                            void (*connect_handle)(int sock_comm));
/*|*/int tcp_server_destroy(ST_TCP_SERVER **pptcpser_obj);
//+------------------------------------------------------------------------------------------+
#ifdef __cplusplus
}
#endif /* End of __cplusplus*/

#endif /* End of #define TCP_SERVER__ */
